package yxy.cherry.paycenter.channelmodule.sdk_shengye;

import java.util.ArrayList;
import org.apache.http.NameValuePair;
import org.joda.time.DateTime;

import com.alibaba.fastjson.JSONObject;

import yxy.apple.logger.Logger;
import yxy.cherry.data.bean.charge;
import yxy.cherry.game.base.bean.SDKParm;
import yxy.cherry.game.base.bean.SdkParmEnum;
import yxy.cherry.paycenter.channelmodule.PayMoudle_channel;
import yxy.cherry.paycenter.database.dao.ordersDao;
import yxy.cherry.paycenter.database.db.orders;
import yxy.cherry.paycenter.util.HttpHelper;
import yxy.cherry.paycenter.util.HttpUtil;
import yxy.game.pm2.bean.Currency;
import yxy.game.pm2.bean.PlayerBean;
import yxy.game.pm2.bean.channel.SdkChannel;
import yxy.game.pm2.bean.module.OrderInfoModule;
import yxy.game.pm2.bean.order.OrderInfo;
import yxy.game.pm2.bean.sdk.WeiXinOtherParm;

public class PayMoudle_shengye extends PayMoudle_channel {
	
	static final Logger logger = Logger.create(PayMoudle_shengye.class);
	
	public static final int android = 1;
	public static final int ios = 2;
	
	private static String jh_order_checklogin = "https://pay.api.xjhgame.net/union/miniapp/order/submit";
	
	@Override
	public JSONObject dealPay(JSONObject infoobj) {
		return null;
	}

	@Override
	public JSONObject createOrderInfo(JSONObject infoobj, orders o) {
		return createOrderInfoAndroid(infoobj, o);
	}

	public void dealReportOrder(orders o) {
		//江湖下单处理
		//江湖验证
		
//		参数名	必选	类型	说明
//		appID	是	string	平台分配的应用id
//		json	是	string	json字符串，结构见：json结构
//		ext	是	string	保留字段，json字符串，固定填写：{}
//		sign	是	string	签名，签名规则请看签名规则
		
//		json结构
//		参数名	必选	类型	说明
//		simpleCode	是	string	渠道值，固定为：MINIAPP
//		uid	是	long	江湖平台uid
//		unionAppId	是	string	小程序appid
//		openUserId	是	string	小程序登录获取到的用户unionid/openid，如有unionid则填写unionid，否则填写openid
//		orderNo	是	string	接入方订单号
//		productNo	是	string	商品编号
//		amount	是	long	订单金额，单位：分
//		adId	是	string	小程序买量获取到的aid
		
		PlayerBean pb = PlayerBean.get(o.getPlayercode());
		
		String openid = "";
		String adId = "";
		
		WeiXinOtherParm wxop = WeiXinOtherParm.get(pb.getUid());
		if(wxop != null) {
			openid = wxop.getOpenid();
			adId = wxop.getAdid() == null ? "" : wxop.getAdid();
		}
		
		JSONObject jhjson = new JSONObject();
		jhjson.put("simpleCode", "MINIAPP");
		jhjson.put("uid", "");
		jhjson.put("unionAppId", SDKParm.getSdkparmvalue(SdkParmEnum.shengye_appid));			
		jhjson.put("openUserId", openid);
		jhjson.put("orderNo", o.getMyorderid());
		jhjson.put("productNo", o.getGoodsid());
		jhjson.put("amount", o.getGoodsprice());
		jhjson.put("adId", adId);
		
		String appID = SDKParm.getSdkparmvalue(SdkParmEnum.shengye_jh_appid);
		String ext = "{}";

		//		签名规则
//		sign = md5 (appID + json + ext + OPENKEY);
//		//`OPENKEY`为平台分配。
		String jhsignstr = appID + jhjson + ext + SDKParm.getSdkparmvalue(SdkParmEnum.shengye_jh_openkey);  
		String jhsign = HttpUtil.getMD5(jhsignstr).toLowerCase();
		
		JSONObject jhpostjson = new JSONObject();
		jhpostjson.put("appID", appID);
		jhpostjson.put("json", jhjson);
		jhpostjson.put("ext", ext);
		jhpostjson.put("sign", jhsign);
		
		logger.info("jhpostjson " + jhpostjson);
		// 发送post请求
		String ret = "";
		try {				
			NameValuePair[] pair = HttpHelper.getValuePair(jhpostjson);
			ret = HttpHelper.doPost(jh_order_checklogin, pair, 30000);
		} catch (Exception e) {
			e.printStackTrace();
		}
		logger.info("ret " + ret);

		
//		JSONObject retjson = JSON.parseObject(ret);
//		参数名	类型	说明
//		statusCode	string	“200”：表示成功，其他值表示接口失败
//		message	string	接口失败时的描述
//		orderNo	string	平台订单号
//		if(!retjson.containsKey("statusCode")) {
//			rjson.put("result", dataerror);
//			writeResponse(resp, rjson.toString());
//			return;
//		}
//		String statusCode = retjson.getString("statusCode");
//		
//		if(!statusCode.equals(jh_order_success)) {
//			rjson.put("result", dataerror);
//			writeResponse(resp, rjson.toString());
//			return;
//		}
		
	}
	
	//安卓
	public JSONObject createOrderInfoAndroid(JSONObject infoobj, orders o) {
//		product_name: "商品名",// 商品名称 可选
//		product_id: "商品ID", // 商品ID 可选
//		order_id: "gorder1233", // string 订单号 必填，游戏⽅⽣成的订单id，⻓度
//		为10-32的字符串，是订单的唯⼀标识，即使清档后也不能重复。建议使⽤appid+⽆序字符串⽣
//		成，以避免和其他游戏的订单重复，若⻓度超出，可使⽤md5加密。
//		product_price: 0.01, // 必填,商品价格,以元为单位
//		extends_param1: "额外参数1", // 选填,服务器将此参数原封不动回传⾄CP服务器
//		extends_param2: "额外参数2", // 选填,服务器将此参数原封不动回传⾄CP服务器
//		role_id: "⻆⾊ID",// 选填,有的话尽量填写
//		role_name: "⻆⾊名称",// 选填,⻆⾊名称
//		role_level: "⻆⾊等级",// 选填,⻆⾊等级
//		server_id: "服务器ID",// 必填,服务器ID（注意：如果产⽣合服操作，合服之后应传
//		⻆⾊⺟服，⽽不是当前服）
//		server_name: "服务器名称",// 选填,服务器名
//		role_vip: "VIP等级"// 选填,VIP等级

		
		JSONObject parseobj = new JSONObject();
		
		String product_name = o.getGoodsname();
		int product_id = o.getGoodsid();
		String order_id = o.getMyorderid();
		String product_price = String.valueOf(o.getGoodsprice() / 100);
		int server_id = o.getServerid();
		
//		//测试
//		product_price = "1"; //"0.01";
		
		parseobj.put("product_name", product_name);
		parseobj.put("product_id", product_id);
		parseobj.put("order_id", order_id);
		parseobj.put("product_price", product_price);
		parseobj.put("server_id", server_id);
		
		o.setExt(parseobj.toString());
		ordersDao.update(o);
		dealReportOrder(o);
		return parseobj;
	}
	
	public static String getToken(String playercode, long time, String secret) {
		String value = "code=%s&time=%s&secret=%s";
		value = String.format(value, playercode, String.valueOf(time), secret);
		String md5 = HttpUtil.getMD5(value);
		md5 = md5.toLowerCase();
		return md5;
	}
	
	public orders createOrderWeiXin(int dataid, String playercode, int serverid, int acttype) {	
		orders o = createOrder(getChannel(), dataid, acttype, playercode, serverid);
		addOrder(o);
		return o;
	}
	
	/**
	 * 创建 OrderInfo
	 * @param o
	 * @param curs
	 * @param c
	 * @param payamount
	 */
	public void createOrderInfoModule(orders o, ArrayList<Currency> curs, charge c, int payamount) {
		createOrderInfoModule(o, curs, c.getVipexp(), payamount);
	}
	
	/**
	 * 
	 * @param o
	 * @param curs
	 * @param vipexp
	 * @return
	 */
	public void createOrderInfoModule(orders o, ArrayList<Currency> curs, int vipexp, int payamount) {
		OrderInfo oi = OrderInfoModule.createOrderInfo(o.getGoodsid(), o.getChannel(), o.getMyorderid(), new DateTime(o.getCreatetime().getTime()), 
				OrderInfoModule.orderinforuning, o.getPlatorderid(), o.getActtype(), o.getPlayercode(), curs, 
				o.getServerid(), DateTime.now(), vipexp, payamount, o.getGoodsprice());
		OrderInfo.set(o.getPlayercode(), oi);
	}
	
	@Override
	public String getChannel() {
		return SdkChannel.sdk_shengye;
	}


}
